#ifndef MONITOR_UI_H
#define MONITOR_UI_H

#include <QWidget>

#include <QLabel>
#include <QThread>
#include <QMutex>
#include <QWaitCondition>
#include <QImage>
#include <QQueue>
#include <QNetworkAccessManager>
#include <QNetworkReply>

class FrameProcessor; // 前向声明
namespace Ui {
class monitor_ui;
}

class monitor_ui : public QWidget
{
    Q_OBJECT

public:

    explicit monitor_ui(const QString &url,QWidget *parent = 0);
    ~monitor_ui();


protected:

private slots:
 void updateFrame(const QImage &frame); // 显示新的帧


 void on_pushButton_clicked();

private:
    Ui::monitor_ui *ui;
    QLabel *videoLabel;              // 显示视频的 QLabel
        FrameProcessor *frameProcessor;  // 用于处理 MJPG 流的线程
        QString streamUrl;               // MJPG 流 URL
};

class FrameProcessor : public QThread {
    Q_OBJECT

public:
    explicit FrameProcessor(const QString &url, QObject *parent = nullptr);
    ~FrameProcessor();

    void stopProcessing(); // 停止线程

signals:
    void newFrame(const QImage &frame); // 发射新帧信号

protected:
    void run() override;

private:
    QString url;                   // MJPG 流 URL
    QNetworkAccessManager *manager; // 网络管理器
    QNetworkReply *reply;          // 网络请求回复
    QMutex mutex;                  // 用于线程安全
    bool running;                  // 是否运行标志
    QByteArray buffer;             // 数据缓冲区
};

#endif // MONITOR_UI_H
